/*服务器tcp连接模块*/
#include "head.h"

/*监听套接字初始化*/
int sock_init(char *str1, char *str2)
{
    int sockfd_1;   // 监听套接字
    int len=0;
    struct sockaddr_in tcp = {AF_INET}, get;                           
    sockfd_1 = socket(AF_INET, SOCK_STREAM, 0); // 1.创建监听套接字
    if (sockfd_1 == -1)
    {
        perror("socket");
        close(sockfd_1);
        exit(-1);
    }

    tcp.sin_port = htons(atoi(str2));
    tcp.sin_addr.s_addr = inet_addr(str1);
    len = sizeof(struct sockaddr_in);
    if (-1 == bind(sockfd_1, (struct sockaddr *)&tcp, len)) // 2.绑定自己的地址到监听套接字（监听有没有客户端连接）
    {
        perror("bind");
        close(sockfd_1);
        exit(-1);
    }

    if (-1 == listen(sockfd_1, 5)) // 3.监听客户端连接
    {
        perror("listen");
        close(sockfd_1);
        exit(-1);
    }

    return sockfd_1;
}

/*接收接听套接字模块*/
int connect_1(int sockfd_1)
{
    int sockfd_2 = 0;
    struct sockaddr_in get = {0};
    int len = sizeof(get);

    sockfd_2 = accept(sockfd_1, (struct sockaddr *)&get, &len);
    if (sockfd_2 == -1) // 4.接受客户端的连接
    {
        perror("accept");
        close(sockfd_2);
        close(sockfd_1);
        exit(0);
    }
    printf("[%s,%d]已连接:\n", inet_ntoa(get.sin_addr), ntohs(get.sin_port));
    sleep(1);
    return sockfd_2;
}